package com.douya.pangu.application.sys.service;

import org.json.JSONObject;

public class JsonToJavaClassGenerator {

    public static String generateJavaClass(String json, String className) {
        JSONObject jsonObject = new JSONObject(json);
        StringBuilder classCode = new StringBuilder();

        // 添加类定义
        classCode.append("public class ").append(className).append(" {\n\n");

        // 遍历JSON对象，生成字段
        for (Object key : jsonObject.keySet()) {
            // 推断字段类型
            Object value = jsonObject.get((String) key);
            String fieldType = getFieldType(value);

            // 添加字段
            classCode.append("    private ").append(fieldType).append(" ").append(key).append(";\n");
        }

        // 添加构造函数
        classCode.append("\n    // 无参构造函数\n")
                .append("    public ").append(className).append("() {}\n\n");

        // 添加带参构造函数
        classCode.append("    public ").append(className).append("(");
        for (Object key : jsonObject.keySet()) {
            Object value = jsonObject.get((String) key);
            String fieldType = getFieldType(value);
            classCode.append(fieldType).append(" ").append(key).append(", ");
        }
        // 去掉最后一个逗号和空格
        classCode.setLength(classCode.length() - 2);
        classCode.append(") {\n");
        for (Object key : jsonObject.keySet()) {
            classCode.append("        this.").append(key).append(" = ").append(key).append(";\n");
        }
        classCode.append("    }\n");

        // 添加getter和setter方法
        for (Object key : jsonObject.keySet()) {
            String capitalizedKey = capitalize((String) key);

            // Getter
            classCode.append("\n    public ").append(getFieldType(jsonObject.get((String) key))).append(" get")
                    .append(capitalizedKey).append("() {\n")
                    .append("        return ").append(key).append(";\n")
                    .append("    }\n");

            // Setter
            classCode.append("\n    public void set").append(capitalizedKey).append("(")
                    .append(getFieldType(jsonObject.get((String) key))).append(" ").append(key).append(") {\n")
                    .append("        this.").append(key).append(" = ").append(key).append(";\n")
                    .append("    }\n");
        }

        // 添加toString方法
        classCode.append("\n    @Override\n")
                .append("    public String toString() {\n")
                .append("        return \"").append(className).append("{\" +\n");
        for (Object key : jsonObject.keySet()) {
            classCode.append("                \"").append(key).append("='\" + ").append(key).append(" + '\\'' +\n");
        }
        classCode.append("                '}';\n")
                .append("    }\n");

        // 结束类定义
        classCode.append("}\n");

        return classCode.toString();
    }

    // 根据值的类型推测字段的类型
    public static String getFieldType(Object value) {
        if (value instanceof Integer) {
            return "Integer";
        } else if (value instanceof Double) {
            return "Double";
        } else if (value instanceof Boolean) {
            return "Boolean";
        } else if (value instanceof String) {
            return "String";
        }
        return "String";  // 默认类型
    }

    // 首字母大写的工具方法
    public static String capitalize(String str) {
        if (str == null || str.isEmpty()) {
            return str;
        }
        return str.substring(0, 1).toUpperCase() + str.substring(1);
    }
}
